﻿#pragma once
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
#include "common.h"
#include <assert.h>


typedef int elem_type;

typedef struct sq_list {
	int sz;             // 元素个数
	int capacity;       // 容量
	elem_type* data;    // 元素数组指针，动态分配
} sqli;

extern void seq_list_init(sqli* sl, size_t init_size); // 初始化顺序表
extern void seq_list_destroy(sqli* sl); // 销毁顺序表
extern void show_index_elem(sqli* sl, int index); // 获取指定位置的值
extern int search_elem(sqli* sl, elem_type elem); // 查找元素
extern void show_all_elem(sqli* sl); // 显示所有元素
extern void add_elem_end(sqli* sl, elem_type elem);  // 在末尾添加元素
extern elem_type del_elem_end(sqli* sl);  // 在末尾删除元素
extern void add_elem_head(sqli* sl, elem_type elem);  // 在开头添加元素
extern elem_type del_elem_head(sqli* sl);  // 在开头删除元素
extern void insert_index_elem(sqli* sl, int index, int value); // 插入元素
extern int del_elem(sqli* sl, elem_type elem); // 删除元素
extern elem_type del_index_elem(sqli* sl, int index); // 删除指定位置的元素
extern void modify_index_elem(sqli* sl, int index, elem_type value); // 修改指定位置的元素
extern void merge_seq_list(sqli* sl1, sqli* sl2); // 合并两个顺序表
extern void reverse_seq_list(sqli* sl1); // 合并两个顺序表
extern void sort_seq_list(sqli* sl); // 合并两个顺序表
extern size_t get_seq_list_len(sqli* sl); // 获取顺序表长度
